/*
 * 描          述:  <描述>
 * 修  改   人:  PengQingyang
 * 修改时间:  2022年4月18日
 * <修改描述:>
 */
package com.tx.component.plugin.util;

import com.tx.component.plugin.context.Plugin;
import com.tx.component.plugin.context.PluginContext;
import com.tx.core.exceptions.util.AssertUtils;

/**
 * 插件容器工具类<br/>
 * <功能详细描述>
 * 
 * @author  PengQingyang
 * @version  [版本号, 2022年4月18日]
 * @see  [相关类/方法]
 * @since  [产品/模块版本]
 */
public abstract class PluginContextUtils {
    
    /**
     * 获取插件配置<br/>
     *    如果插件尚未执行安装，将默认根据配置类返回其实例对象，其中enable=false
     * <功能详细描述>
     * @param pluginType
     * @return [参数说明]
     * 
     * @return PLUGIN [返回类型说明]
     * @exception throws [异常类型] [异常说明]
     * @see [类、类#方法、类#成员]
     */
    public static <PLUGIN extends Plugin<?>> boolean isEnable(
            Class<PLUGIN> pluginType) {
        AssertUtils.notNull(pluginType, "pluginType is null.");
        
        PLUGIN plugin = PluginContext.getContext().getPlugin(pluginType);
        if (plugin == null) {
            return false;
        }
        if (plugin.getConfig() != null && plugin.getConfig().isEnable()) {
            return true;
        } else {
            return false;
        }
    }
    
    /**
     * 获取插件<br/>
     * <功能详细描述>
     * @param id
     * @param pluginType
     * @return [参数说明]
     * 
     * @return PLUGIN [返回类型说明]
     * @exception throws [异常类型] [异常说明]
     * @see [类、类#方法、类#成员]
     */
    @SuppressWarnings("unchecked")
    public static <PLUGIN extends Plugin<?>> boolean isEnable(String id) {
        AssertUtils.notEmpty(id, "id is empty.");
        PLUGIN plugin = (PLUGIN) PluginContext.getContext().getPlugin(id);
        if (plugin == null) {
            return false;
        }
        if (plugin.getConfig() != null && plugin.getConfig().isEnable()) {
            return true;
        } else {
            return false;
        }
    }
    
    /**
     * 获取插件<br/>
     * <功能详细描述>
     * @param id
     * @param pluginType
     * @return [参数说明]
     * 
     * @return PLUGIN [返回类型说明]
     * @exception throws [异常类型] [异常说明]
     * @see [类、类#方法、类#成员]
     */
    public static <PLUGIN extends Plugin<?>> boolean isEnable(String id,
            Class<PLUGIN> pluginType) {
        AssertUtils.notEmpty(id, "id is empty.");
        PLUGIN plugin = PluginContext.getContext().getPlugin(id, pluginType);
        if (plugin == null) {
            return false;
        }
        if (plugin.getConfig() != null && plugin.getConfig().isEnable()) {
            return true;
        } else {
            return false;
        }
    }
}